package com.coderman.infosys.auth.api.dto.sdk;

import com.coderman.infosys.plat.auth.common.dto.BaseResponseDTO;
import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * Description:
 * 由于AuthorityBO本身就是一个聚合，在聚合层面可能更关注角色+权限，
 * 但是很现实的场景是我们有面向角色的权限聚合，有面向用户的权限聚合
 * 面向角色组的权限聚合，或者面向用户组的权限聚合，那么如果让AuthorityBO去识别这些聚合场景也不是不可以，由于这种聚合场景会
 * 受到对象关联关系和底层数据关系的影响这种大场景的聚合会非常不稳定也容易变得复杂，
 * 另外一个原因就是AuthorityBO本身是面向权限的抽象聚合，那么跨领域聚合可能就不再合适堆叠到AuthorityBO上
 *
 * 所以这里在DTO层面为不同的场景构建不同的权限DTO，类似于从不同的维度来构建权限的需求
 *
 * 这种DTO本身可能在设计者的眼里本身就是为了对外API提供的，那么在cola这个项目里可能还需要提供一个
 * auth-sdk作为外部引用的权限接口包，
 *
 * date: 2022/1/9
 *
 * @author shenshuai
 * @version 1.0.0
 * @since JDK 1.8
 */
@Data
public class UserAuthorityDTO extends BaseResponseDTO {
    /**
     * 用户ID
     */
    private Long  userId;

    /**
     * 该用户有哪些角色
     */
    private List<String> roleCodeList;

    /**
     * 该用户属于哪些角色组
     */
    private List<String> roleGroupCodeList;

    /**
     * 系统-菜单-按钮权限列表
     */
    private Map<String, Map<String, List<String>>> systemCodeMap;

    /**
     * 应用-表-字段按钮权限列表
     */
    private Map<String, Map<String, List<String>>> dataColumnMap;


    /**
     * 部门权限
     */
    private List<Long> departIdList;


    /**
     * 省-城市-县权限列表
     */
    private Map<String, Map<String, List<String>>> addressMap;


    /**
     * 职位权限
     */
    private List<Long> jobIdList;


}
